#include <my_header.h>

// 用来标识进程的状态
enum
{
    BUSY,
    FREE
};

// 定义结构体，用来让父进程记录一些信息
typedef struct son_status_s
{
    pid_t pid;  // 进程的pid
    int flag;   // 记录子进程的状态：忙、空闲
    int local_socket;   // 用来和子进程通信的本地socket

}son_status_t;

// 这是一个初始化子进程的函数
// 第一个参数：存储初始化进程的信息
// 第二个参数：代表有几个子进程
// 返回值：0创建子进程成功，-1代表失败
int initPoll(son_status_t *list, int num);

// 初始化socket服务的函数
// 第一个参数:传入传出参数，socket对象的文件描述符
// 第二个参数：ip地址
// 第三个参数：端口
// 返回值：0创建socket成功，—1代表失败
int initSocket(int *socket_fd, char *ip, char *port); 

// 记录监听的文件描述符放入监听
// 第一个参数；epoll对象的文件描述符
// 第二个参数：要放入监听的文件描述符
// 返回值：.....
int addEpoll(int epoll_fd, int fd);

// 在子进程中，选取一个空闲进程，处理客户端连接
// 第一个参数：父进程记录子进程的信息
// 第二个参数：子进程的个数
// 第三个参数：新的socket对象(新的客户端连接)
// 返回值...:???????????????????????????????
int toSonNetFd(son_status_t *list, int num, int net_fd);

// 子进程的核心函数：一直循环，一直recv读取任务
// 参数：用来和父进程通信的本地socket文件描述符
int doWorker(int locak_socket);

// 通过本地socket向对应的子进程发一个net_fd信息
// 第一个参数：main进程和工作进程用来通信的本地文件描述符
// 第二个参数：main进程accept的客户端连接对象的文件描述符
int sendMsg(int local_socket, int net_fd);

// 子进程读取父进程通过本地socket发过来的客户端socket对象
// 第一个参数：main进程和工作进程用来通信的本地文件描述符
// 第二个参数：客户端连接对象的文件描述符指针
int recvMsg(int local_socket, int *net_fd);

// 这个函数用来和文件交互
// 参数：客户端连接对象的文件描述符
int toClientFile(int net_fd);

// 给客户端回传文件
// 参数：用来和指定客户端通信的socket的文件描述符
int sendFile(int net_fd);








